package com.justgame.project.service.system.service.basic;

import com.justgame.project.service.system.entity.SysFileInfo;
import com.justgame.project.service.system.query.SysFileInfoQuery;
import com.justgame.project.service.system.wrapper.SysFileInfoWrapper;
import com.justgame.project.base.servcice.IBasicService;
import java.util.List;
import org.springframework.util.Assert;
import org.springframework.lang.NonNull;
import java.lang.Boolean;
import java.lang.String;

/**
 *
 * 系统文件信息存储表服务自定义查询类
 *
 * @@tableName sys_file_info
 * @author Zwb
 */
@SuppressWarnings("all")
public interface BasicSysFileInfoService extends IBasicService<SysFileInfoQuery,SysFileInfo,SysFileInfoWrapper> {

   /**
    * 查询通过字段：存储路径
    * @param pathIn 存储路径
    */
   default List<SysFileInfo> listByPathIn(String[] pathIn){
      return list(SysFileInfoQuery.builder().getWrapper()
                  .in(SysFileInfo::getPath,pathIn));
   }

   /**
    * 新增创建
    * @param name 文件名
    * @param path 存储路径
    * @param size 文件大小（bite字节）
    * @param suffix 文件后缀
    * @param accessLevel 访问权限
    * @param lockPassword 文件访问密码
    * @param willDel 是否需要预删除（未来的某一时间会删除，因此暂时判定为已删除。定时器会自动处理删除这个动作）
    */
   default SysFileInfo baseAdd(String name, String path, String size, String suffix, SysFileInfo.AccessLevel accessLevel, String lockPassword, Boolean willDel){
      SysFileInfo sysFileInfo = new SysFileInfo();
      sysFileInfo.setName(safeValue(name, null));
      sysFileInfo.setPath(safeValue(path, null));
      sysFileInfo.setSize(safeValue(size, null));
      sysFileInfo.setSuffix(safeValue(suffix, null));
      sysFileInfo.setAccessLevel(safeValue(accessLevel, null));
      sysFileInfo.setLockPassword(safeValue(lockPassword, null));
      sysFileInfo.setWillDel(safeValue(willDel, null));
      save(sysFileInfo);
      return sysFileInfo;
   }

   /**
    * 更新
    * @param name 文件名
    * @param path 存储路径
    * @param size 文件大小（bite字节）
    * @param suffix 文件后缀
    * @param accessLevel 访问权限
    * @param lockPassword 文件访问密码
    * @param willDel 是否需要预删除（未来的某一时间会删除，因此暂时判定为已删除。定时器会自动处理删除这个动作）
    */
   default boolean baseUpdate(@NonNull SysFileInfo sysFileInfo,String name, String path, String size, String suffix, SysFileInfo.AccessLevel accessLevel, String lockPassword, Boolean willDel){
      Assert.notNull(suffix,"必须提供文件后缀");
      Assert.notNull(accessLevel,"必须提供访问权限");
      Assert.notNull(lockPassword,"必须提供文件访问密码");
      Assert.notNull(size,"必须提供文件大小（bite字节）");
      Assert.notNull(path,"必须提供存储路径");
      Assert.notNull(name,"必须提供文件名");
      Assert.notNull(willDel,"必须提供是否需要预删除（未来的某一时间会删除，因此暂时判定为已删除。定时器会自动处理删除这个动作）");
      Assert.notNull(sysFileInfo.getId(),"必须提供主键ID");
      sysFileInfo.setName(safeValue(name, null));
      sysFileInfo.setPath(safeValue(path, null));
      sysFileInfo.setSize(safeValue(size, null));
      sysFileInfo.setSuffix(safeValue(suffix, null));
      sysFileInfo.setAccessLevel(safeValue(accessLevel, null));
      sysFileInfo.setLockPassword(safeValue(lockPassword, null));
      sysFileInfo.setWillDel(safeValue(willDel, null));
      return updateById(sysFileInfo);
   }

}